/*
 * Copyright (c) 2016. For Intelligent Group.
 */

package com.intelligent.mts.da.utils;

import com.google.common.collect.Lists;
import com.intelligent.mts.da.message.ReceiveServerMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * Created by julia on 16/7/21.
 */
public class MessagesUtils {

    public static Logger logger = LoggerFactory.getLogger(MessagesUtils.class);

    private static List<String> startFlags;

    private static List<String> datas;
    private static List<String> resultDatas;
    private static List<String> processDatas;

    public static ReceiveServerMessage decodeMessage(String message) throws Exception {
        if (message == null) {
            logger.error("Message is null.");
            return null;
        }
        String[] messages =  message.split(";");

        if (messages == null || messages.length == 0) {
            logger.error("Message is null.");
            return null;
        }

        String startFlag = messages[0];
        String endFlag = messages[messages.length - 1];

        if (!getStartFlags().contains(startFlag) &&  messages.length < 3 && !endFlag.contains(Constant.END_FLAG)) {
            logger.error("Message format error.");
            return null;
        }

        ReceiveServerMessage receiveMessage = new ReceiveServerMessage();
        receiveMessage.setStartFlag(startFlag);
        //receiveMessage.setLineId(messages[1]);
        String data = "";
        for (int i = 2; i < messages.length - 1; i ++) {
            String m = messages[i];
            switch(m) {
                case Constant.ORDER :
                    receiveMessage.setOrderId(m);
                    break;
                default:
                    data += m + ";";
            }
        }
        receiveMessage.setData(data.substring(0, data.length() != 0 ? (data.length() - 1) : 0));
        return receiveMessage;
    }

    private static List<String> getStartFlags() {
        if (startFlags == null) {
            startFlags = Lists.newArrayList();
            startFlags.add(Constant.START_VALIDATE_RESP);
            startFlags.add(Constant.START_STATUS_RESP);
            startFlags.add(Constant.START_DATA_RESP);
            startFlags.add(Constant.START_HEAT);
        }
        return  startFlags;
    }

    public static List<String> getDatas() {

        if (datas == null) {
            datas = Lists.newArrayList();
            datas.add("0420;HOU=1;");
            datas.add("0430;HOU=1;");
            datas.add("0450;HOU=1;");
            datas.add("0610;PCBA=1;");
            datas.add("0620;PCBA=2;HS=3;");
            datas.add("0650;HS=3;");
            datas.add("0680;HS=3;");
            datas.add("0680;THT=4;");
            datas.add("0680;DSP=5;");
            datas.add("0680;GW=6;");
            datas.add("0690;HS=3;");
            datas.add("0730;HS=3;");
            datas.add("0930;HS=3;HOU=7;");
            datas.add("0950;HOU=7;");
            datas.add("0970;HOU=7;");
            datas.add("0990;HOU=7;");

            datas.add("1010;HOU=7;");
            datas.add("1020;HOU=7;");
            datas.add("1030;HOU=7;");
            datas.add("1050;HOU=7;");
            datas.add("1060;HOU=7;");
        }
        return  datas;
    }

    public static String getCurrentData(int flowId) {
       List<String> dataLists = getDatas();
        return  dataLists.get(flowId);
    }

    public static List<String> getResultDatas() {

        if (resultDatas == null) {

            resultDatas = Lists.newArrayList();
            resultDatas.add("0420;HOU=1;");
            resultDatas.add("0430;HOU=1;");
            resultDatas.add("0450;HOU=1;");
            resultDatas.add("0610;PCBA=1;");

            resultDatas.add("0620;PCBA=2;");

            resultDatas.add("0650;HS=3;");
            resultDatas.add("0680;HS=3;");
            resultDatas.add("0680;THT=4;");
            resultDatas.add("0680;DSP=5;");
            resultDatas.add("0680;GW=6;");
            resultDatas.add("0690;HS=3;");
            resultDatas.add("0730;HS=3;");
            resultDatas.add("0930;HS=3;");
            resultDatas.add("0950;HOU=7;");
            resultDatas.add("0970;HOU=7;");
            resultDatas.add("0990;HOU=7;");

            resultDatas.add("1010;HOU=7;");
            resultDatas.add("1020;HOU=7;");
            resultDatas.add("1030;HOU=7;");
            resultDatas.add("1050;HOU=7;");
            resultDatas.add("1060;HOU=7;");
        }
        return  datas;
    }

    public static String getCurrentResultData(int flowId) {
        List<String> dataLists = getResultDatas();
        return  resultDatas.get(flowId);
    }


    public static List<String> getProcessDatas() {

        if (processDatas == null) {
            processDatas = Lists.newArrayList();
            processDatas.add("0420;HOU=7;order=1;screwing_time=333;program_num=44;torque=5555;angle=999;");
            processDatas.add("0430;HOU=7;order=1;screwing_time=9999;program_num=88;torque=44;angle=ff;");
            processDatas.add("0950;HOU=7;order=1;screwing_time=2016-07-22;program_num=01;torque=123456;angle=789;");
            processDatas.add("0970;HOU=7;order=1;screwing_time=2016-07-22;program_num=02;torque=1234560;angle=7890;");
            processDatas.add("1010;HOU=7;order=1;screwing_time=2016-07-22;program_num=03;torque=1234561;angle=7891;");
        }
        return  datas;
    }

    public static String getCurrentProcessData(int flowId) {
        List<String> dataLists = getProcessDatas();
        return  processDatas.get(flowId);
    }

}
